spec:
  versions:
    - name: v1alpha1
      schema: &schema
        openAPIV3Schema:
          description: |
            При появлении объекта `DexAuthenticator` в namespace будут созданы:
            * Deployment с oauth2-proxy и redis;
            * Service, ведущий на Deployment с oauth2-proxy;
            * Ingress, который принимает запросы по адресу `https://<applicationDomain>/dex-authenticator` и отправляет их в сторону Service;
            * Secret'ы, необходимые для доступа к Dex.

            **Важно!** При перезапуске пода с oauth2-proxy с помощью refresh token'а будут получены и сохранены в память redis актуальные `access token` и `id token`.
          properties:
            spec:
              properties:
                applicationDomain:
                  description: |
                    Внешний адрес вашего приложения, с которого пользовательский запрос будет перенаправлен для авторизации в Dex.

                    **Не должен** содержать HTTP-схему.
                sendAuthorizationHeader:
                  description: |
                    Флаг, который отвечает за отправку конечному приложению заголовка `Authorization: Bearer`.

                    Включать, **только** если приложение умеет обрабатывать такой заголовок.
                applicationIngressCertificateSecretName:
                  description: |
                    Имя Secret'а с TLS-сертификатом (от домена `applicationDomain`), который используется в Ingress-объекте приложения. Secret должен обязательно находиться в том же namespace, что и DexAuthenticator.
                applicationIngressClassName:
                  description: |
                    Название Ingress-класса, которое будет использоваться в Ingress-объекте (должно совпадать с названием Ingress-класса для `applicationDomain`).
                keepUsersLoggedInFor:
                  description: |
                    Отвечает за то, как долго пользовательская сессия будет считаться активной, если пользователь бездействует (указывается с суффиксом s, m или h).
                allowedGroups:
                  description: |
                    Группы, пользователям которых разрешено проходить аутентификацию.

                    Дополнительно параметр помогает ограничить список групп до тех, которые несут для приложения полезную информацию.

                    Например, в случае если у пользователя более 50 групп, но приложению Grafana мы хотим передать только определенные 5 групп.
                  x-doc-default: Разрешены все группы.
                whitelistSourceRanges:
                  description: |
                    Список адресов в формате CIDR, которым разрешено проходить аутентификацию. Если параметр не указан, аутентификацию разрешено проходить без ограничения по IP-адресу.
                signOutURL:
                  description: |
                    Передайте URL приложения, запросы с которого будут проксированы на URL выхода у `dex-authenticator`.
                nodeSelector:
                  description: |
                    Определяет `nodeSelector` для подов `dex-authenticator`.

                    Если ничего не указано или указано `false`, будет [использоваться автоматика](https://deckhouse.ru/documentation/v1/#выделение-узлов-под-определенный-вид-нагрузки).

                    **Формат**: стандартный список `nodeSelector`. Поды инстанса унаследуют это поле как есть.
                tolerations:
                  description: |
                     Определяет `tolerations` для подов `dex-authenticator`.

                     Если ничего не указано или указано `false`, будет [использоваться автоматика](https://deckhouse.ru/documentation/v1/#выделение-узлов-под-определенный-вид-нагрузки).

                     **Формат**: стандартный список [toleration](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/). Поды инстанса унаследуют это поле как есть.
                  items:
                    properties:
                      effect:
                        description: |
                          Определяет, какому effect'у taint'а соответствует описываемый toleration. Пустой подразумевает соответствие любому effect'у.
                      key:
                        description: |
                          Определяет, какому ключу (key) taint'a соответствует описываемый toleration. Пустой подразумевает соответствие любому ключу.

                          Если ключ не указан (пуст), `operator` должен быть `Exists`, что подразумевает соответствие любым `value` и `key`.
                      operator:
                        description: |
                          Определяет отношение ключа (key) к значению (value) — должен ли ключ быть равен (`Equal`) значению или допустимо существование ключа с любым значением.

                          Указание `Exists` равносильно допуску любого значения (для value), чтобы под с указанным toleration удовлетворял соответствующему taint'у.
                      tolerationSeconds:
                        description: |
                          Определяет период времени в секундах, в течение которого планировщик должен ждать, прежде чем вытеснить (evict) под с узла, если
                          toleration перестал удовлетворять taint'у (справедливо **только** для effect `NoExecute`, иначе игнорируется).

                          Если **не установлено**, под не будет вытеснен с узла, если toleration перестал удовлетворять taint. Если **установлен в ноль** (или отрицателен), под будет вытеснен с узла немедленно, если toleration перестал удовлетворять taint'у.

                          **По умолчанию** используется значение «не установлено».
                      value:
                        description: |
                          Значение, которому должен удовлетворять toleration.

                          Должно быть пустым, если operator — `Exists`.
      additionalPrinterColumns: &additionalPrinterColumns
        - jsonPath: .spec.applicationDomain
          name: Domain
          type: string
    - name: v1
      served: true
      storage: false
      schema: *schema
      additionalPrinterColumns: *additionalPrinterColumns
